#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc, char const *argv[])
{
    printf("父进程(%d)开始执行 \n", getpid());
    pid_t pid = fork();
    if (pid == 0) { // 子进程
        printf("子进程(%d)开始执行\n", getpid());
        // 在子进程中执行  ping -c 10 www.atguigu.com
        char *path = "/bin/ping";
        char *argv[] = {path, "-c", "10", "www.atguigu.com", NULL}; // 数组最后一个元素必须是NULL
        int result = execve(path, argv, NULL); // NULL表示使用默认环境变量
        if (result == -1) {  // 只有execve执行失败才会返回-1，如果成功不返回
            perror("execve执行失败");
            exit(EXIT_FAILURE);
        }

    } else { // 父进程
        printf("父进程(%d)继续执行\n", getpid());
        // 等待子进程结束 =》 让子进程先执行完
        int status;
        waitpid(pid, &status, 0); // 0表示阻塞等待
        printf("父进程等待结束， status=%d\n", status);
    }
    
    printf("进程(%d)执行结束\n", getpid());
    return 0;
}
